package com.lframework.xingyun.promo.bo.limitprice;

import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import com.lframework.starter.common.constants.StringPool;
import com.lframework.starter.web.core.bo.BaseBo;
import java.time.LocalDateTime;

import com.lframework.xingyun.promo.entity.MarketingLimitprice;
import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

/**
 * <p>
 * 限时特价活动 GetBo
 * </p>
 *
 */
@Data
public class GetMarketingLimitpriceBo extends BaseBo<MarketingLimitprice> {

    /**
     * ID
     */
    @ApiModelProperty("ID")
    private String id;

    /**
     * 促销活动名称
     */
    @ApiModelProperty("促销活动名称")
    private String name;

    /**
     * 促销活动开始时间
     */
    @ApiModelProperty("促销活动开始时间")
    @JsonFormat(pattern = StringPool.DATE_PATTERN)
    private LocalDateTime beginDate;

    /**
     * 促销活动结束时间
     */
    @ApiModelProperty("促销活动结束时间")
    @JsonFormat(pattern = StringPool.DATE_PATTERN)
    private LocalDateTime endDate;

    /**
     * 活动期间是否周期执行
     */
    @ApiModelProperty("活动期间是否周期执行")
    private Boolean cycleFlag;

    /**
     * 周期类型(1:每天; 2:每周; 3:每月)
     */
    @ApiModelProperty("周期类型(1:每天; 2:每周; 3:每月)")
    private Integer cycleType;

    /**
     * 周期执行时间段
     */
    @ApiModelProperty("周期执行时间段")
    private String cycleTimeGroup;

    /**
     * 周期执行规则
     */
    @ApiModelProperty("周期执行规则")
    private String cycleTimeRule;

    /**
     * 促销价格
     */
    @ApiModelProperty("促销价格")
    private String promPrice;

    /**
     * 是否适应全部会员等级
     */
    @ApiModelProperty("是否适应全部会员等级")
    private Integer allMemberLevel;

    /**
     * 会员等级id
     */
    @ApiModelProperty("会员等级id")
    private String memberLevelId;

    /**
     * 是否限制购买数量
     */
    @ApiModelProperty("是否限制购买数量")
    private Boolean allBuyLimit;

    /**
     * 周期限购数量
     */
    @ApiModelProperty("周期限购数量")
    private Integer cycleBuyLimit;

    /**
     * 是否全部商品参与
     */
    @ApiModelProperty("是否全部商品参与")
    private Boolean allProduct;

    /**
     * 商品id
     */
    @ApiModelProperty("商品id")
    private String productId;

    /**
     * 是否可使用优惠券
     */
    @ApiModelProperty("是否可使用优惠券")
    private Boolean useCoupon;

    /**
     * 是否可参与满减
     */
    @ApiModelProperty("是否可参与满减")
    private Boolean useFullreduction;

    /**
     * 是否可参与满折
     */
    @ApiModelProperty("是否可参与满折")
    private Boolean useFulldiscount;

    /**
     * 是否可参与满赠
     */
    @ApiModelProperty("是否可参与满赠")
    private Boolean useFullgiftactivity;

    /**
     * 是否全部门店
     */
    @ApiModelProperty("是否全部门店")
    private Boolean allShop;

    /**
     * 门店id
     */
    @ApiModelProperty("门店id")
    private String shopId;

    @ApiModelProperty("活动状态")
    private Integer marketingState;

    public GetMarketingLimitpriceBo() {

    }

    public GetMarketingLimitpriceBo(MarketingLimitprice dto) {

        super(dto);
    }

    @Override
    public BaseBo<MarketingLimitprice> convert(MarketingLimitprice dto) {
        return super.convert(dto);
    }

    @Override
    protected void afterInit(MarketingLimitprice dto) {
        long time = DateUtil.date().getTime();
        // 已结束
        if (DateUtil.date(this.endDate).getTime() < time) {
            this.marketingState = 1;
        }
        // 进行中
        else if (DateUtil.date(this.beginDate).getTime() <= time
                && DateUtil.date(this.endDate).getTime() >= time) {
            this.marketingState = 3;
        }
        // 未开始
        else if (DateUtil.date(this.beginDate).getTime() > time) {
            this.marketingState = 2;
        }
    }
}

